<?php

if (!function_exists('p')) {
    /**
     * 打印数据
     * @param mixed ...$data
     * */
    function p(...$data) {
        $arg_list = func_get_args();

        $arg_list = func_num_args() == 1 ? $arg_list[0] : $arg_list;

        echo '<pre>' . print_r($arg_list, true) . '</pre>' . "\r\n\r\n";
    }
}

if (!function_exists('db')) {
    /**
     * 数据连接
     * @auth false
     * @return \extend\Mysqli
     */
    function db() {
        static $DB;
        global $qe_db_config;
        if (!$DB) {
            $DB = new \extend\Mysqli($qe_db_config);
        }
        return \extend\Mysqli::getInstance();
    }
}

if (!function_exists('input')) {
    /**
     * 获取输入数据 支持默认值和过滤
     * @param string $key 获取的变量名
     * @param mixed $default_value 默认值
     * @param string|callable $filter 过滤方法
     * @return mixed
     */
    function input($key = '', $default_value = null, $filter = '') {
        // 1. 移除问号前缀（如果存在）
        if (0 === strpos($key, '?')) {
            $key = substr($key, 1);
        }

        // 2. 处理指定数据来源的情况
        if ($pos = strpos($key, '.')) {
            $method = strtolower(substr($key, 0, $pos));
            $key = substr($key, $pos + 1);

            // 获取对应的数据源
            $data = match($method) {
                'get' => $_GET,
                'post' => $_POST,
                'cookie' => $_COOKIE,
                'session' => $_SESSION ?? [],
                'files' => $_FILES,
                default => null
            };

            // 如果找到对应的数据源
            if ($data !== null) {
                // 如果没有指定具体键名，返回整个数据源
                if ($key === '') {
                    return $data;
                }

                // 如果指定了键名，返回对应值或默认值
                if (isset($data[$key])) {
                    $value = $data[$key];
                    return is_callable($filter) ? call_user_func($filter, $value) : $value;
                }
                return $default_value;
            }
        }

        // 3. 处理未指定数据来源的情况
        $params = array_merge($_GET, $_POST);  // 移除了不必要的类型转换和文件、Cookie合并

        // 如果没有指定键名，返回所有参数
        if ($key === '') {
            return $params;
        }

        // 如果指定了键名，返回对应值或默认值
        if (isset($params[$key])) {
            $value = $params[$key];
            return is_callable($filter) ? call_user_func($filter, $value) : $value;
        }

        return $default_value;
    }
}

if (!function_exists('json')) {
    /**
     * 前端json
     * @param $data
     * @param $status
     * @return string json
     */
    function json($data, $code = 200, $msg = null, $debug = []) {
        //p($msg);
        if (is_string($data) && $msg === null) {
            $msg = $data;
            $data = '';
        }

        if ($code === true) {
            $result = $data;
        } else {
            $result = [
                'data' => $data,
                'code' => $code,
                'msg' => $msg
            ];
        }
        echo json_encode($result);
    }
}

if (!function_exists('view')) {
    /**
     * view
     * @auth false
     * @param $name
     * @return void
     */
    function view($name, $data) {
        include __DIR__ . '/extend/template/' . $name . '.html';
    }
}

if (!function_exists('_ip_')) {
    function _ip_() {
        return function_exists('ip') ? ip() : ($_SERVER['REMOTE_ADDR'] ?? '');
    }
}

spl_autoload_register(function ($class) {
    $file = __DIR__ . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
    if (file_exists($file)) {
        require $file;
        return true;
    }
    return false;
});

// if (is_file($file = dirname(__DIR__, 2) . '/core/base.php')) {
//     include_once $file;
//     $db_config = config('database')['connections']['mysql'];
// }

//以下只是兼容tw程序,没有的可以删除
if (function_exists('g')) {
    !session_id() && session_start();
    g('IP', _ip_());
    g('POST', $_POST);
    g('GET', $_GET);
    g('FILES', $_FILES);
    g('SESSION', $_SESSION);
    g('SERVER', $_SERVER);
    g('COOKIE', $_COOKIE);
}
